VPCエンドポイント経由のVPCフローログ取得範囲について理解する
いきなり問題
こんにちは!AWS事業本部のおつまみです。
いきなりですが、問題です!
あなたはAWS上にVPC AとVPC Bを下記のように構築しました。
VPC AのEC2からNLBのVPCエンドポイント経由でNLB、ALBを介してEC2に接続しています。
またVPC BにはVPCフローログが設定されています。
さて、VPC Bのフローログで取得できるIPトラフィックはどこからどこまででしょう?
いきなり答え
答えはNLB→ALB→EC2までがフローログで取得できる範囲になります。
VPCエンドポイントサービスからNLBへのアクセスはトラフィックできません。
このように公式ドキュメントにもしっかり記載されています。
VPCフローログとは
改めてVPCフローログについて、簡単におさらいします。
VPCのENI(ネットワークインターフェイス)間で行き来する IP トラフィックをキャプチャする機能です。
なるほど。
VPCエンドポイントは別のVPCで作成されるため
VPCエンドポイントサービスにはENIが作られないため
トラフィックが取得できないんですね。
「VPCエンドポイント..?」となっている方はこちらの記事で解説してます。
他にもVPCフローログの特徴を記載します。
- フローログの取得範囲は「VPC」「サブネット」「個別のENI」(VPCだけじゃない)
- 取得したログの出力先は「S3」「CloudWatch Logs」「Amazon Kinesis Firehose」(Amazon Kinesis Firehoseは2022/9に配信可能になりました)
Amazon Virtual Private Cloud (VPC) フローログが Amazon Kinesis Firehose に配信可能に
どこに出力するのがいいのか?
- S3・・全体コストを抑えたい場合、Athenaを利用した確認でOKな場合、蓄積したログを後で利用する場合
- CloudWatch Logs・・リアルタイムなログの可視化が必要な場合、アラートの設定が必要な場合
- Amazon Kinesis Firehose・・リアルタイムでストリーミング処理を行いたい場合
その他VPCフローログの詳細は公式ドキュメントをご確認下さい。
実際に確認してみた
実際にVPC B側のフローログにはNLB始まりのレコードしか出力されていないのか確認してみます!
今回の構成図です。
VPCフローログを設定するところ以外は、こちらの記事でご紹介したCloudFormationテンプレートで構築しています。
S3バケットの作成
VPCフローログを保存するためのバケットを作成します。
一時的に確認したいだけのため、S3サービスの[バケットの作成]からデフォルトの設定のまま作成します。
VPCフローログを設定
VPC AとBのフローログを作成します。
VPCサービスより各VPCを選択し、[フローログを作成]をクリックします。
任意の名前と先ほど作成したS3バケットを設定します。
他にも[フィルタ][最大集約間隔][ログ形式]などを設定できますが、今回はデフォルトのまま設定します。
VPC AのEC2からVPC BのEC2に接続
VPC AのEC2にSession Manager経由で接続します。
NLBのエンドポイントにcurlをして、VPC Bへの接続を確認します。
% curl <NLBのエンドポイント> Hello world
VPCフローログの確認
しばらくするとS3バケットにログが出力されます。
早速ログの中身を確認してみます。
- 必要なフィールドのみ表示しています。
- startとendはUNIX時間で表示されるため、変換しています。
※公式ドキュメント記載の通り、記録される時間は実際にパケットが通過した時間と最大60秒のラグがあります。
・VPC A側
EC2(10.0.0.146)→ NLBのVPCエンドポイント(10.0.0.76)
interface-id | srcaddr | dstaddr | srcport | dstport | start(※変換済) | end(※変換済) | action | log-status |
---|---|---|---|---|---|---|---|---|
eni-0dfc71062338593dc | 10.0.0.76 | 10.0.0.146 | 80 | 34574 | 2022年10月04日 20:37:47 | 2022年10月04日 20:37:49 | ACCEPT | OK |
eni-0dfc71062338593dc | 10.0.0.146 | 10.0.0.76 | 34574 | 80 | 2022年10月04日 20:37:47 | 2022年10月04日 20:37:49 | ACCEPT | OK |
・VPC B側
NLB(10.1.0.45)→ALB(10.1.0.136)
interface-id | srcaddr | dstaddr | srcport | dstport | start(※変換済) | end(※変換済) | action | log-status |
---|---|---|---|---|---|---|---|---|
eni-0b5462ff97b19b4bf | 10.1.0.45 | 10.1.0.136 | 42382 | 80 | 2022年10月04日 20:37:49 | 2022年10月04日 20:37:51 | ACCEPT | OK |
eni-0b5462ff97b19b4bf | 10.1.0.136 | 10.1.0.45 | 80 | 42382 | 2022年10月04日 20:37:49 | 2022年10月04日 20:37:51 | ACCEPT | OK |
ALB(10.1.0.136)→EC2(10.1.0.127)
interface-id | srcaddr | dstaddr | srcport | dstport | start(※変換済) | end(※変換済) | action | log-status |
---|---|---|---|---|---|---|---|---|
eni-01979b3bf139569bb | 10.1.0.136 | 10.1.0.127 | 31738 | 80 | 2022年10月04日 20:37:50 | 2022年10月04日 20:31:18 | ACCEPT | OK |
eni-01979b3bf139569bb | 10.1.0.127 | 10.1.0.136 | 80 | 31738 | 2022年10月04日 20:37:50 | 2022年10月04日 20:31:18 | ACCEPT | OK |
接続確認を行った時のVPC B側のログには、NLB→ALB→EC2のレコードしか出力されていないことがわかりました。(他にもヘルスチェックの通信によるレコードは表示されていました。)
最後に
今回はVPCエンドポイント経由のVPCフローログ取得範囲についてまとめました。
エンドポイント〜NLBのログはVPCフローログでは出力できないことが実際に試して、理解することができました。
どなたかのお役に立てれば幸いです。 最後までお読みいただきありがとうございました!
以上、おつまみ(@AWS11077)でした!